import request from "@/utils/request";
import { AxiosPromise } from 'axios';

/**
 * 游戏用户信息接口
 */
export interface GameUserInfo {
  id: number;
  username: string;
  avatar?: string;
  level: number;
  totalGames: number;
  totalPlayTime?: number;
  lastActive?: string;
  activityLevel: string;
  achievementCount?: number;
  gamePreferences?: string[];
  points: number;
  trend?: number;
  createTime?: string;
  updateTime?: string;
  averageRating?: number;
}

/**
 * 游戏用户成就接口
 */
export interface GameAchievement {
  id: number;
  name: string;
  description: string;
  icon?: string;
  unlocked: boolean;
  unlockedDate?: string;
  gameId?: number;
  gameName?: string;
}

/**
 * 游戏类型分布接口
 */
export interface GameTypeDistribution {
  type: string;
  count: number;
  percentage?: number;
}

/**
 * 游戏记录接口
 */
export interface GameUserRecord {
  id: number;
  name: string;
  gameType: string;
  playTime: number;
  lastPlayed: string;
  progress: number;
  favorite: boolean;
}

/**
 * 游戏用户查询参数接口
 */
export interface GameUserInfoQuery {
  pageNum: number;
  pageSize: number;
  username: string;
  activityLevel: string;
  userLevel?: number;
  startDate: string;
  endDate: string;
  sortField: string;
  sortOrder: string;
}

/**
 * 游戏用户数据API
 */
export default {
  /**
   * 获取用户列表
   * @param params 查询参数
   * @returns 用户列表数据
   */
  getUserList(params: GameUserInfoQuery) {
    return request({
      url: "/api/v1/game/users/page",
      method: "get",
      params
    });
  },

  /**
   * 获取用户详情
   * @param userId 用户ID
   * @returns 用户详情数据
   */
  getUserInfo(userId: number) {
    return request({
      url: `/api/v1/game/users/${userId}`,
      method: "get"
    });
  },

  /**
   * 获取用户游戏成就
   * @param userId 用户ID
   * @returns 用户游戏成就数据
   */
  getUserAchievements(userId: number) {
    return request({
      url: `/api/v1/game/achievements/user?userId=${userId}`,
      method: "get"
    });
  },
  
  /**
   * 获取用户游戏记录
   * @param params 查询参数
   * @returns 用户游戏记录
   */
  getUserGameRecords(params: any) {
    return request({
      url: "/api/v1/game/records/page",
      method: "get",
      params
    });
  },

  /**
   * 获取游戏类型分布统计
   * @param userId 用户ID，可选
   * @returns 游戏类型分布数据
   */
  getGameTypeDistribution(userId?: number) {
    return request({
      url: "/api/v1/game/users/game-type-distribution",
      method: "get",
      params: userId ? { userId } : {}
    });
  },

  /**
   * 获取用户活跃度分布
   * @returns 用户活跃度分布数据
   */
  getActivityDistribution() {
    return request({
      url: "/api/v1/game/users/activity-distribution",
      method: "get"
    });
  },

  /**
   * 获取每月新增用户趋势
   * @param months 月数，默认为12
   * @returns 月度趋势数据
   */
  getMonthlyTrend(months: number = 12) {
    return request({
      url: "/api/v1/game/users/monthly-trend",
      method: "get",
      params: { months }
    });
  },

  /**
   * 获取用户游戏时长分布
   * @returns 游戏时长分布数据
   */
  getPlayTimeDistribution() {
    return request({
      url: "/api/v1/game/users/play-time-distribution",
      method: "get"
    });
  },
  
  /**
   * 获取用户每日游戏时长
   * @param userId 用户ID
   * @returns 每日游戏时长数据
   */
  getDailyPlayTime(userId: number) {
    return request({
      url: `/api/v1/game/statistics/daily-play-time`,
      method: "get",
      params: { userId }
    });
  },
  
  /**
   * 获取用户时段分布
   * @param userId 用户ID
   * @returns 时段分布数据
   */
  getHourlyDistribution(userId: number) {
    return request({
      url: `/api/v1/game/statistics/hourly-distribution`,
      method: "get",
      params: { userId }
    });
  },
  
  /**
   * 获取用户游戏进度列表
   * @param userId 用户ID
   * @param limit 数量限制
   * @returns 游戏进度列表
   */
  getGameProgressList(userId: number, limit: number = 5) {
    return request({
      url: `/api/v1/game/records/progress-list`,
      method: "get",
      params: { userId, limit }
    });
  },

  /**
   * 导出用户数据
   * @param params 查询参数
   * @returns 导出文件URL
   */
  exportUserData(params: GameUserInfoQuery) {
    return request({
      url: "/api/v1/game/users/export",
      method: "get",
      params
    });
  },

  /**
   * 导出分析报告
   * @returns 导出文件URL
   */
  exportAnalysisReport() {
    return request({
      url: "/api/v1/game/users/export/analysis",
      method: "get"
    });
  }
}; 